跳到主要内容

音效

music

music(N, [FADE_LEN], [CHANNEL_MASK])

播放音乐Play music starting from pattern N (0..63)

  • N = 0-63 从音乐模版N开始播放
  • N = -1 停止

FADE_LEN : 过渡时间(ms) (default: 0)

例子: 从模版0播放, 过渡时间1秒:

music(0, 1000)

CHANNEL_MASK: 定义保留给音乐的通道(bit位方式)

例如, 只在通道0-2播放:

music(0, nil, 7) -- 1 | 2 | 4

如果播放音效的命令指明了使用的通道,那么音效就忽略保留选项, 如果不指明通道,那么不会使用保留的通道。

sfx

sfx(N, [CHANNEL], [OFFSET], [LENGTH])

在指定的通道(CHANNEL)上播放音效N, OFFSET是音效的数据偏移点,LENGTH是数据长度。

CHANNEL 特殊值:

  • CHANNEL -1: (缺省值) 自动选择一个没有被使用的通道
  • CHANNEL -2: 暂停所有音效

N 特殊值:

  • N -1: 停止指定通道的音效
  • N -2: 停止指定通道的音效循环
sfx(3)    --  播放音效 3
sfx(3,2) -- 播放音效3, 使用通道2
sfx(3,-2) -- 通知所有通道的音效3
sfx(-1,2) -- 停止通道2上的音效
sfx(-2,2) -- 停止通道2上的音效循环
sfx(-1) -- 停止所有音效
sfx(-2) -- 退出所有的音效循环

wave

wave(data, [from, to, audiotype])

直接播放pcm音频数据, 音频需要符合设备规格22050hz, 16bit little格式。

data 为特殊值时有特殊意义:

  • wave('I') -- 初始化(申请内部资源)
  • wave('R') -- 重置数据缓冲区
  • wave('D') -- 释放资源
  • wave('L') -- 返回剩余缓冲区大小
  • wave() -- 返回剩余缓冲区大小

audiotype 表示音频类型, 默认PCM:

  • 1 : adpcm
  • 2 : G711a
coloX-4
version 1
__lua__

local wavefile={
#blob :ea:22050: canon.pcm
}

local curpos=0
wave('I')
function _update()
if wave()>22050 then
curpos=curpos+1
local c=wavefile[curpos]
if c then
wave(c,nil,nil,1)
else
curpos=0
end
end
end
function _draw()
cls(dark_green)
end

micpoll [version>=7]

micpoll([flag,maxlen, audiotype])

获取录音. 音频格式22050hz, 16bit little. 需要系统打开mic功能.

flag 为特殊值时有特殊意义:

  • 1 -- 清缓冲区
  • 2 -- 获取有效数据长度(16bit的长度)
  • 3 -- 获取数据, maxlen表示最多的数据量(16bit数据)
  • 4 -- 获取fft数据, 返回: avg,maxidx,maxval,[ffts]. 针对ffts, maxlen表示获取多少个点位数组. 0表示不要ffts,1表示返回直流分量ffts,n(n>1)返回数组ffts

audiotype 表示音频类型, 默认PCM:

  • 1 : adpcm
  • 2 : G711a
coloX-4
version 1
__lua__

wave('I')
micpoll(1)
function _update()
local d=micpoll(nil,nil,1)
if d then
wave(d,nil,nil,1)
end
end
function _draw()
cls(dark_green)
end